草庐IT

c++ - DLL的开销

全部标签

c - 在单个 udp 服务器中处理 40 个客户端的可能算法

我正在研究udp服务器/cient应用程序。我希望我的服务器一次能够处理40个客户端。现在我正在使用创建一个接收线程的方法,该线程连续接收数据,并在需要时创建一个发送线程来发送数据。由于套接字队列足够大,可以缓冲来自40个客户端的数据,所以我只使用一个接收线程。实现这种单服务器多客户端的其他可能方法是什么申请? 最佳答案 您当然可以运行多个服务器线程,但每个线程都必须监听不同的UDP端口。如果这对您来说没问题,请尝试使用多个线程,但不要超过您拥有的处理器内核数。由于线程切换,除此之外的任何事情都会减慢整个过程。您可以尝试的另一件事是

c - getchar() 没有按预期运行?

所以,我在VisualStudio2012Ultimate中使用getchar得到了一些奇怪的结果。这是我能想出的最简单的例子来证明这不是代码错误,而是其他原因。#includeintmain(intargc,char*argv[]){charc=getchar();putchar(c);return0;}但是,结果(在视觉上)表现得有点像iostream库中的“cin”。getchar按原样返回一个字符(第一个),但是当我按下键时,它会在屏幕上显示字符并且在我按下回车键之前不会返回。我搜索了一下,并没有真正找到任何其他发生这种情况的案例,有没有人知道这里发生了什么?

c - 将可变长度结构从用户模式传递到内核模式

我正在写虚拟磁盘驱动程序,我有这样定义的结构:typedefstruct_MOUNT_NEW_QUERY{PWCHARimagePath;WCHARletter;PCHARkey;}MOUNT_NEW_QUERY,*PMOUNT_NEW_QUERY;所以我有一种动态大小的结构。我必须如何将它从用户模式传递到我的驱动程序? 最佳答案 分配一个连续的内存块,足以容纳你的结构和“键”和“路径”的数据——像这样:/*weadd+1forterminatingNULLstomakelifeeasy*/size_tkeyLen=(strlen(

c - 在函数中传递指向 SOCKADDR_IN 和 SOCKET 的指针

我有一个函数createServerSocket()。多个线程可以访问此函数以创建它们的套接字。我希望每个线程向createrServerSocket()函数传递三个参数,一个socketIdentifier、*sockaddr_in*和特定的端口号,所以每个线程都有一个唯一的套接字。为此,我将socketIdentifier、*sockaddr_in*和特定的端口号作为指针传递给createrServerSocket()函数,以便创建的socketIdentifier和套接字必须可以在线程内访问.下面是我的代码片段:VOIDcreateServerSocket(SOCKADDR_IN

c - C 和 Windows GDI 中的双缓冲*框架*

背景:我的客户有一个非常广泛的专有表单库,它在C中有效地实现(实际上,它是一种专有的面向对象的语言,基本上包装Windows控件并与它们交互SendMessage()、SetStyle()等)我要解决的问题:每当我在上述框架中实现的应用程序中拖动/调整顶层窗口(或拖动拆分器)时,都会出现大量闪烁。顶层窗口被重新绘制,它包含的任何控件都会重新绘制。问题1:有没有办法通过外科手术将双缓冲引入表单库。特别是,我想知道是否可以使用标准WindowsGDI函数实现双缓冲。例如,如果我可以使顶层窗口进行双缓冲,这样顶层窗口的所有子窗口也自动进行双缓冲绘制。一个更好的选择是能够在任意窗口上引入双缓冲

c - 当使用 CreateProcess 启动子程序时,不会在父程序的工作目录中搜索 DLL

我有一个很奇怪的问题。我正在Windows下开发一个C程序,它将数据写入临时目录。它使用GetTempFileName生成一个唯一的名称。数据实际上是一个exe,我以CreateProcess开头数据写入临时文件后。对于lpCurrentDirectory参数,我使用NULL以便使用父程序的当前工作目录成为子程序的工作目录。有所有需要的DLL。在大多数计算机(XP、2003、7、8)上,一切都按预期运行。但是在一个特定的Windows7上,子程序启动时出现异常。非常奇怪,但如果我将所有需要的DLL移动到临时目录,一切都会按预期进行。嗯,为什么不在父程序的工作目录中搜索DLL?非常感谢。

安装了 AMD64 和 win32 的 system32 中的 python.dll

标准的Python安装程序将pythonXY.dll放置在Windows的system32中。如果我安装32位和64位版本,system32文件夹中只有一个pythonXY.dll,但两个解释器仍然有效。我的印象是每个解释器都需要自己的架构特定的dll。此外,Dependencywalker告诉我相同的dll用于两个解释器。一旦调用,仍然每个在其标题中分别显示AMD64或win32。这是如何工作的? 最佳答案 32位模拟器(称为WOW64)有一个名为SysWOW64的并行系统目录。在那里可以找到32位DLL。系统透明地将访问syst

windows - Qt Creator 交叉开发和 Windows DLL

我草草地解决了现有的QT交叉编译问题,但找不到答案,所以我试一试:我想将QTcreator用于独立于平台的平台(更确切地说是Linux、Win和OSX,也许有时甚至Android)程序也基本上已经完全编程。但是,源代码需要libhpdf(又名libharu)以及libgng和libz,这在Windows下编译时会很痛苦。因此,我考虑包括libhpdfdll,我的问题来了:知道如何仅在WINDOWS编译中包括dll吗?有没有办法以这种方式设置QT项目?在Linux和OSX中,我想包含原始的libharu代码,并只链接libpng和libz。非常感谢您的帮助,G.

C 代码在 Windows 上比在 Linux 上慢

我正在开发一个项目,该项目将针对32位和64位Windows和Linux进行构建。该项目基于为文本文件加载字符串、对其进行处理并将结果写入SQLite3数据库。在Linux上,它达到每秒近400k个序列,由GCC编译,没有任何优化。然而在Windows上它卡在每秒100k个序列,在没有任何优化的情况下在VS2010上编译。我尝试在编译器中使用优化,但没有任何改变。这样对吗?Windows上的C代码运行速度较慢?编辑:我想我需要更清楚地说明一些要点。我在启用和禁用代码优化的情况下进行了测试。性能没有改变,可能是因为我的程序的瓶颈是浪费时间从HD读取数据。该程序利用了并行计算的优势。有一个

c - 如何使用gnu C/C++ tools for arm生成的静态库和Microsoft C/C++ tools for arm

我有一个由GNU工具在Linux环境中为ARM生成的静态库(.a),我想在Windows环境(VisualStudio2008)中使用这个库,使用Microsoft工具为ARM架构。有什么方法可以通过Microsoft工具使用.a静态库吗?我没有源代码,所以我不能为MS编译器交叉编译源代码。谢谢! 最佳答案 即使您可以链接它,也无济于事。如果是针对linux环境编译的,就意味着系统调用等是针对linux操作系统的,与windows不兼容。如果你使用cygwin,你可能有机会。如果该库仅包含不需要与操作系统交互的支持功能,那么您可以尝